package com.study.d012Components;

import java.util.function.UnaryOperator;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.control.IndexRange;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextFormatter;
import javafx.scene.control.TextFormatter.Change;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import javafx.util.StringConverter;

/**
 *
 * TextArea的使用
 *
 */
public class TextAreaMain extends Application{
	public static void main(String[] args) {
		launch(args);
	}
	@Override
	public void start(Stage stage) throws Exception {
		AnchorPane ap= new AnchorPane();

		TextArea ta = new TextArea();
		ta.setPrefHeight(200);
		ta.setPrefWidth(200);

		ap.getChildren().add(ta);


		stage.setScene(new Scene(ap,400,300));
		stage.show();

		//设置默认值
		//ta.setText("ABCDEFHI");

		//清空
/*		ta.clear();
		ta.setText("");*/

		//将光标放在首位
		//ta.home();

		//将光标放在末尾
		//ta.end();

		//设置为只读
		//ta.setEditable(false);

		//替换
		//ta.replaceText(IndexRange.normalize(0, 3), "测试中");

		//通过监听限制文本长度
		/*ta.textProperty().addListener(new ChangeListener<String>() {
			@Override
			public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
				if(newValue.length() > 12){
					ta.setText(oldValue);
				}
			}
		});*/

		//setTextFormatter()方法，使用方式一
		//监听TextArea的输入 ， TextField也有此方法 ，当然也可以使用textProperty()监听进行处理
		//先执行fromString()方法，执行toString()方法，最后将结果回显到ta组件中
	/*	ta.textProperty().addListener(new ChangeListener<String>() {

			@Override
			public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
				ta.setTextFormatter(new TextFormatter<String>(new StringConverter<String>() {
					@Override
					public String toString(String object) {
						//这里也可以对字符串进行过滤操作
						return object;
					}

					@Override
					public String fromString(String string) {
						//对字符串进行过滤操作
						if(string.contains("5")){
							return string.replace("5", "五");
						}
						return string;
					}
				}));
				//记住：要提交才生效
				ta.commitValue();
			}
		});
*/

		//setTextFormatter()方法，使用方式二
		ta.setTextFormatter(new TextFormatter<>(new UnaryOperator<TextFormatter.Change>() {
			@Override
			public Change apply(Change t) {
				String v = t.getText();
				if(v.matches("[0-9]*")){
					return t;
				}
				return null;
			}
		}));


	}
}
